/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.celularessuc.gco.neg;

import com.jjsoft.celularessuc.gco.dao.GenericController;
import com.jjsoft.celularessuc.gco.mdl.DeudaProveedor;
import com.jjsoft.celularessuc.gco.mdl.Proveedor;
import com.jjsoft.celularessuc.gco.util.AtributoInvalidoException;
import com.jjsoft.celularessuc.gco.util.CNumeros;
import com.jjsoft.celularessuc.gco.util.DeudaProveedorValidadorException;
import com.jjsoft.celularessuc.gco.util.ValidarAtributoUtil;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author javila
 */
public class DeudaProveedorManager {

    GenericController<DeudaProveedor> controladorDeudaProveedor = new GenericController<DeudaProveedor>();

    public void guardarDeuda(DeudaProveedor deuda) throws DeudaProveedorValidadorException {
        try {
            ValidarAtributoUtil.validarDoubleCero("Monto Deuda", deuda.getMontoInicial());
            ValidarAtributoUtil.validarDoubleNegativo("Monto Deuda", deuda.getMontoInicial());
        } catch (AtributoInvalidoException ex) {
            throw new DeudaProveedorValidadorException(ex);
        }

        controladorDeudaProveedor.create(deuda);
    }

    public List<DeudaProveedor> listaDeudasPorProveedor(Proveedor proveedor) {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "id_proveedor=" + proveedor.getIdProveedor()+ " order by fecha");
    }
    public List<DeudaProveedor> listaDeudasPorProveedor(Proveedor proveedor, int estado) {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "id_proveedor=" + proveedor.getIdProveedor() + " and estado="+estado+ " order by fecha");
    }
    public List<DeudaProveedor> listaTodasDeudas() {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "id_deuda>0 order by fecha");
    }
     public List<DeudaProveedor> listaTodasDeudas(int estado) {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "estado="+estado+" order by fecha");
    }
    public List<DeudaProveedor> listaDeudasVencidas(Proveedor proveedor)
    {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "id_proveedor=" + proveedor.getIdProveedor() + " and estado=1 and fecha_vencimiento < current_date order by fecha");
    }
    public List<DeudaProveedor> listaDeudasVencidas( )
    {
        return controladorDeudaProveedor.findWhere(new DeudaProveedor(), "estado=1 and fecha_vencimiento < current_date order by fecha");
    }

    public void reducirSaldo(DeudaProveedor deuda, Double abono) {
        deuda.setSaldoActual(CNumeros.redondear(deuda.getSaldoActual() - abono));
        if (deuda.getSaldoActual() == 0) {
            deuda.setEstado(0);
        }
        try {
            controladorDeudaProveedor.edit(deuda);
        } catch (Exception ex) {
            Logger.getLogger(DeudaProveedorManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
